/**
 * ES7 中引入了 async/await，这种方式能够彻底告别执行器和生成器，实现更加直观简洁的代码。
 * 根据 MDN 定义，async 是一个通过异步执行并隐式返回 Promise 作为结果的函数。
 * 可以说async 是Generator函数的语法糖，并对Generator函数进行了改进。
 */

async function async1() {
  console.log('async1 start')
  await async2()
  console.log('async1 end')
}
async function async2() {
  console.log('async2')
}
console.log('script start')
setTimeout(function () {
  console.log('setTimeout')
}, 0)
async1()
new Promise(function (resolve) {
  console.log('promise1')
  resolve()
}).then(function () {
  console.log('promise2')
})
console.log('script end')
;('script start')
;('async1 start')
;('async2')
;('promise1')
;('script end')
;('async1 end')
;('promise2')
;('setTimeout')
